<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>操作节点</title>
</head>
<body>
    <input id="addNode" type="button" value="添加节点">
    <input id="insertNode" type="button" value="插入节点">
    <input id="replaceNode" type="button" value="替换节点">
    <input id="removeNode" type="button" value="删除节点">
    <div id="d1">
        <p>段落1</p>
        <p>段落2</p>
        <p>段落3</p>
    </div>
    <script>
        let addNode = document.getElementById("addNode");
        let d1 = document.getElementById("d1");
        addNode.onclick = function(){
            // createElement：创建元素节点
            // createTextNode：创建文本节点
            // appendChild：在指定元素节点下面追加新的节点
            let p = document.createElement("p");
            let txt = document.createTextNode("新增段落");
            p.appendChild(txt);
            d1.appendChild(p);
        }

        
        let insertNode = document.getElementById("insertNode");
        insertNode.onclick = function(){
            let p = document.createElement("p");
            let txt = document.createTextNode("新增段落");
            p.appendChild(txt);

            let old = document.querySelector("#d1>p:nth-child(1)");
            // insertBefore：插入节点，调用父节点的insertBefore方法，
            // 其中第一参数表示插入的新节点，第二个参数表示要插入到哪个指定的节点之前
            d1.insertBefore(p,old);
        }

        let replaceNode = document.getElementById("replaceNode");
        replaceNode.onclick = function(){
            let p = document.createElement("p");
            let txt = document.createTextNode("新增段落");
            p.appendChild(txt);
            let old = document.querySelector("#d1>p:nth-child(1)");
            // replaceChild：替换节点，和insertBefore类似，调用父节点的replaceChild方法
            // 其中第一参数表示要替换的新节点，第二个参数表示要被替换的原节点
            d1.replaceChild(p,old);
        }

        let removeNode = document.getElementById("removeNode");
        removeNode.onclick = function(){
            // removeChild：删除节点，调用父节点的removeChild方法
            // 其中参数表示要删除的子节点
            d1.removeChild(d1.lastChild);
        }
    </script>
</body>
</html>